<script setup lang='ts'>
import { ref } from 'vue'
import type { ButtonProps } from './types'
import FreeIcon from '../Icon/Icon.vue'

defineOptions({
    name: 'Button'
})

withDefaults(defineProps<ButtonProps>(), {
  nativeType: 'button'
})

const _ref = ref<HTMLButtonElement>()

defineExpose({
  ref: _ref
})

</script>

<template>
    <button
        ref="_ref"
        class="vk-button"
        :class="{
            [`vk-button--${type}`]: type,
            [`vk-button--${size}`]: size,
            'is-plain': plain,
            'is-round': round,
            'is-circle': circle,
            'is-disabled': disabled,
            'is-loading': loading
        }"
        :disabled="disabled || loading"
        :autofocus="autofocus"
        :type="nativeType"
    >
    <FreeIcon icon="spinner" spin v-if="loading" />
    <FreeIcon :icon="icon" v-if="icon" />
    <span>
      <slot />
    </span>
  </button>
</template>

<style lang='scss' scoped>

</style>
